package broad.dao;

/**
 *
 * @author Rafael
 */

import broad.util.CaixaMensagemGUI;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public abstract class DAOGenerics<K, G> {

    public void inserir(K obj) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            s.getTransaction().begin();
            s.saveOrUpdate(obj);
            s.getTransaction().commit();
        } catch (Exception e) {
            s.getTransaction().rollback();
            new CaixaMensagemGUI().caixaErro("Erro na inserção/atualização. Favor tentar novamente", "Erro");
        } finally {
            s.close();
        }

    }

    public void apagar(K obj, Session s) throws Exception{

        s.getTransaction().begin();
        s.delete(obj);
        s.getTransaction().commit();

    }

    public void apagar(K obj) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            apagar(obj, s);
        } catch (Exception e) {
            s.getTransaction().rollback();
            new CaixaMensagemGUI().caixaErro("Erro na remoção. Favor tentar novamente", "Erro");
        } finally {
            s.close();
        }
        
    }

    public abstract K buscar(G obj);

    public abstract K buscar(G obj, Session s);

    public abstract List<K> buscarTodos();

    public abstract List<K> buscarTodos(Session s);
}
